Find inspiration for naming your design tokens with this comprehensive exploration of widespread and well-known naming conventions and their pros and cons.
Tuesday, March 26, 2024Brad Frost, author of Atomic Design, shares his thoughts on why we should build a universal design system, how he uses AI to elevate design systems, how design systems designers can succeed in an AI world, the highest leverage activities for DS designers to do, and how designers can communicate better with engineers.
Figma is hosting Framework, a global design systems virtual event, on April 16. The event will explore Figma's approach to building tools and features that support today's and tomorrow's design systems challenges. Various sessions will cover new features, insights from industry leaders on their design systems journeys, and expert Q&As. In addition, there will be product sessions about structuring and maintaining your system.
To ensure the adoption and success of a design system, creators need to adopt a marketer's mindset, craft a compelling narrative, engage with different stakeholders, and demonstrate its value consistently across the organization. Strategies include developing target audience-specific pitches, utilizing engaging communication channels, establishing clear success metrics, and fostering a community of internal advocates to create a self-sustaining culture of use and improvement.
Figma announced Code Connect for developers, typography and gradient variables, and the Library Analytics API during its Framework event, which focused on design systems. Code Connect, a Dev Mode tool, imports production-ready code snippets directly into the platform. Typography and gradient variables give designers new levels of control, scalability, and accessibility. The Library Analytics API enables enterprise customers to store and analyze library data outside of Figma.
Jim Nielsen discusses the limitations of the "LEGO" analogy for design systems, arguing that prefabricated components have less value in the age of generative AI and open-source libraries. Even with prefabricated components, custom "one-off" designs are still necessary for each product, and a successful design system needs more than just prefabrication and composition.
This author initially designed a strict, composable design system inspired by Chakra UI to solve inconsistencies and a poorly structured existing design system. However, the system proved difficult for many developers to use due to their lack of experience with functional composition. In hindsight, the author believes a design system built around Tailwind/NativeWind would have been more approachable for developers.
Design system experts from Bumble, GitHub, and HP discuss leveraging the new Code Connect feature to integrate design and code, highlighting the importance of a shared language and seamless workflow. They emphasize the need for continuous collaboration and the adoption of best practices to maximize the utility of design systems, ensuring consistency and reducing friction between designers and developers.
The article discusses the importance of design systems from a developer's perspective, emphasizing how they can enhance usability and streamline the development process. It begins with an analogy comparing the intuitive experience of riding a bicycle to the desired user experience in software applications. Just as riding a bike becomes second nature, the goal is to create software that users can navigate effortlessly. Design systems are presented as a solution to achieve this level of usability, allowing teams to build and ship applications quickly while maintaining consistency through standardized components. The piece highlights the potential pitfalls of poorly implemented design systems, which can hinder rather than help development. It stresses the need to treat design systems as products that require ongoing investment and maintenance to remain effective. A well-maintained design system can provide stability and speed up development, while a neglected one can lead to technical debt and inefficiencies. The article advocates for an iterative approach to building design systems, contrasting it with the traditional waterfall method. Developers are encouraged to focus on simplicity and to build design systems incrementally, using user feedback to guide improvements. The example of Slack illustrates this point, showing how the company managed to standardize its components without sacrificing development speed, ultimately leading to the creation of Slack Kit. Another critical aspect discussed is the necessity of maintaining design systems to prevent them from becoming obsolete. Developers often express skepticism about using design systems due to past experiences with poorly maintained products. The article suggests that design systems should be flexible and adaptable, allowing for both standardization and customization. The Spotify design system, Encore, is cited as an example of balancing consistency with the need for creative freedom. The importance of alignment between developers and designers is also emphasized. Effective communication and collaboration can prevent wasted effort and ensure that both teams are working towards the same goals. The article uses Airbnb's experience to illustrate how a shared visual language can enhance productivity and consistency across teams. Finally, the article encourages viewing design systems as basecamps for exploration rather than constraints on creativity. By providing a stable foundation, design systems can empower developers and designers to innovate and experiment without losing sight of consistency and usability. The piece concludes by promoting UXPin Merge as a tool that facilitates the creation of production-ready prototypes, further enhancing the design and development workflow.
In the exploration of design system primitives, Josh Cusick emphasizes their importance in enhancing design systems and empowering teams to create more efficiently. Primitives serve as fundamental building blocks that allow designers and developers to rapidly iterate on user experiences while leveraging design tokens. This approach aims to simplify the design process and reduce cognitive load, ultimately leading to improved productivity and fewer errors. Cusick previously discussed the need for design systems to focus on core components, patterns, and design tokens, advocating for a more streamlined approach to what gets included in these systems. He raises a critical question: if a design system only provides basic components like buttons and text fields, how can teams effectively extend and utilize the system? The answer lies in the introduction of primitives. Primitives, such as Box, Stack, and Grid, are enhanced elements that provide direct access to design tokens, making it easier to apply design decisions. For instance, a Box component acts as a versatile div that can be styled with design tokens, allowing teams to customize properties like background color without extensive coding. This flexibility is crucial for teams that need to adapt components to their specific needs while maintaining design consistency. The Stack component is another example, primarily used for layout management. It simplifies the process of arranging elements with predefined spacing and alignment options, reducing the amount of code required for common layout tasks. By offering top-level props that correspond to flexbox properties, the Stack component streamlines the development process, making it easier for teams to create responsive designs. The Grid component plays a vital role in managing overall application layouts, ensuring consistency across different screens and applications. It can be configured to handle responsiveness, breakpoints, and spacing, allowing teams to maintain a cohesive design language throughout their projects. Cusick illustrates the practical applications of these primitives through examples, demonstrating how they can be used to create complex layouts with minimal effort. By nesting components like Stack within a Card, teams can achieve a clean and type-safe structure that adheres to design system guidelines. This approach not only enhances the user experience but also fosters collaboration between designers and developers, as both can work within the same framework. In conclusion, embracing design system primitives like Box, Stack, and Grid significantly enhances the flexibility and usability of design systems. By providing these supercharged elements that connect directly to design tokens, teams can build with confidence, ensuring design consistency while allowing for creative innovation. This methodology ultimately leads to a more efficient design and development process, empowering teams to deliver high-quality user experiences.
Zigma is a platform that simplifies the creation and management of design systems, making it accessible for both designers and developers. It emphasizes key attributes such as speed, scalability, accessibility, and flexibility, ensuring that users can build functional and reusable design systems that are also unique and bespoke to their needs. The platform aims to bridge the gap between design and development, facilitating a seamless workflow that allows teams to collaborate effectively. Zigma provides tools that help in documenting design systems, ensuring consistency and efficiency across projects. Users can get started with Zigma for free, and there is an option to book a demo for a more in-depth exploration of its features. The platform is backed by Y Combinator, a well-known startup accelerator, which adds to its credibility and potential for growth. Zigma is developed by NextUI Inc., and it positions itself as a comprehensive solution for organizations looking to enhance their design processes while maintaining a high level of quality and collaboration.
Design systems play a crucial role in ensuring consistency and efficiency across various applications within an organization. However, their effectiveness hinges on proper implementation and adoption by design and product teams. Lynn Hao, a Lead Designer at Adobe, emphasizes that a design system, such as Spectrum, must be actively used and understood to reach its full potential. This requires not only well-designed components but also comprehensive guidance and ongoing support as the system evolves. Spectrum serves over 100 unique applications and a diverse team of more than 600 individuals at Adobe. The challenge lies in guiding teams on how to properly utilize the design system, especially during significant updates like Spectrum 2. The design system is a living entity, constantly iterating, and understanding how to assist others in its implementation is a process that requires time and experience. To facilitate ongoing documentation, the Spectrum team created a playbook that evolved into an internal website, serving as the primary source of information. This website provides a stable and scalable platform for sharing guidelines, best practices, and resources tailored to the needs of designers and developers. The documentation includes fundamental principles, detailed design guidelines, integration instructions for developers, and support resources to help teams navigate the system effectively. Key screen explorations are another valuable tool for demonstrating how to flex the design system in real-world applications. These explorations illustrate design challenges and suggested solutions, helping teams understand the intended usage of components. For instance, the Spectrum team encouraged the removal of unnecessary dividers in favor of using spacing and typography to group content, which was visually refreshing but required careful communication to avoid misinterpretation. The documentation process also involves providing workflow-specific guidance. The Spectrum team discovered that product teams respond best to a combination of high-level guidelines and concrete examples. By referencing existing solutions for complex use cases, the team can promote early alignment and develop broader guidance over time. Communication is vital in keeping teams informed about updates to the design system. Regular announcements about changes, bug fixes, and new components help ensure that teams are aware of how updates impact their work. The Spectrum team uses platforms like Slack to share in-progress updates and gather feedback, fostering collaboration and ensuring that guidelines are adapted for new use cases. Ongoing support is essential as teams grow and the design system evolves. The Spectrum team employs various communication channels to address questions and provide guidance, ranging from one-on-one support to feedback forms. This approach allows for personalized assistance while also efficiently managing straightforward queries. System designers must maintain a strong opinion to ensure coherence across products and adherence to good design practices. They should provide constructive feedback, acknowledging the expertise of product teams while offering insights based on their broader perspective. This collaborative approach fosters shared ownership of the design system and encourages teams to seek guidance rather than simply requesting approvals. Understanding the underlying needs behind requests is crucial for effective support. By asking clarifying questions, system designers can uncover the rationale behind specific requests and suggest scalable solutions that align with the design system's principles. This process not only helps in addressing immediate needs but also strengthens the overall design system. Ultimately, the success of a design system relies on making information accessible and useful, guiding proper usage, and fostering collaboration among teams. Through documentation, communication, and shared ownership, the Spectrum team aims to ensure that the design system is not only adopted but also effectively utilized to enhance the design process across Adobe's diverse applications.
In the realm of modern user interface (UI) design, the significance of design systems has become increasingly apparent. Customers today expect seamless experiences, intuitive navigation, and the opportunity to engage with innovative and meaningful products. If a UI fails to meet these expectations, a design system can serve as a crucial tool for improvement. A design system is essentially a standardized collection of resources and tools that design and development teams utilize to create cohesive digital experiences. This includes reusable patterns, guidelines, kits, and code that contribute to a consistent user interface and user experience (UX). The importance of UI design spans all stages of product development, and many components within a design system are specifically crafted to enhance UI quality. Companies like Apple, Google, and Mozilla have embraced design systems as integral to their brand identities, often sharing them to assist others in crafting exceptional digital experiences. The advantages of a comprehensive design system in enhancing UI are manifold. Firstly, it establishes a common language among team members, which is vital in an industry where terminology can evolve and vary between organizations. A design system codifies this language, ensuring clarity and reducing misunderstandings, particularly when non-technical teams are involved in initial prototypes. Secondly, design systems optimize resource utilization. UI professionals focus on creating engaging digital environments, and by having standardized components, they can avoid repetitive tasks. Once a button or form is perfected, it can be reused, allowing designers to dedicate their time to more significant challenges, such as user research and client collaboration. This efficiency not only improves the UI across products but also fosters professional growth within the design team. Moreover, design systems proactively address UI challenges. Without such a system, basic components may be altered without adherence to established UI principles, potentially leading to poor user experiences. A well-structured design system considers every element from the outset, ensuring that only the most effective components are included in the final design. Testing becomes more streamlined with a design system in place. The inclusion of a pattern library allows for individual components to be tested easily, facilitating A/B testing and ensuring that only specific elements are varied during trials. This consistency helps maintain a uniform user experience across different iterations, making it easier to respond to user feedback. Creating a design system is not a one-time task; it is an evolving process that adapts to changes in technology and user needs. As standards for web accessibility and new technologies emerge, design systems must be updated to reflect these advancements. Continuous improvement is essential, as design systems should encompass all critical decisions, leading to outstanding UI designs that require fewer revisions. For those interested in developing their own design system, resources and guides are available to assist in the process, ensuring that teams can create effective and user-centered digital experiences.